import axios from 'axios';
import { ElMessage } from 'element-plus';
import JSONBIG from 'json-bigint';
import { useLoginUserStore } from "@/store/user";
import { base_url_main,baseURL } from "@/api/routerToMain";


// 重置 axios 默认的 transformResponse，避免冲突
axios.defaults.transformResponse = [];

// 创建自定义 Axios 实例
const myAxios = axios.create({
  baseURL, // 基础接口地址
  timeout: 600000, // 关键：延长全局超时到10分钟（解决小文件上传超时）
  withCredentials: true, // 保留跨域凭证
  // 使用 json-bigint 解析 JSON 数据（处理大整数）
  transformResponse: [function (data) {
    try {
      if (typeof data !== 'string') {
        return data; // 非字符串数据直接返回
      }

      // 大整数存储为字符串，避免精度丢失
      const jsonParser = JSONBIG({ storeAsString: true });
      console.log('Parsing response data with json-bigint:', data);
      const parsedData = jsonParser.parse(data);
      console.log('Parsed response data:', parsedData);

      return parsedData;
    } catch (error) {
      console.error('Error parsing response data:', error);
      throw error; // 解析失败时抛出错误，避免后续逻辑异常
    }
  }]
});

// 请求拦截器：添加 token 到请求头
myAxios.interceptors.request.use(
  (config) => {
    // 1. 从本地存储获取 token
    const token = localStorage.getItem("token_ai_pan");
    const accountNo = localStorage.getItem("accountNo");
    if (token) {
      config.headers['token_ai_pan'] = token; // 添加 token 到请求头
      config.headers['account_no'] = accountNo;
    }

    // 2. 关键：保留 onUploadProgress 配置（不做任何修改）
    // 确保进度回调能传递到 axios 底层
    return config;
  },
  (error) => {
    console.error('Request interceptor error:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器：处理未登录、数据格式等问题
myAxios.interceptors.response.use(
  (response) => {
    console.log('Raw response from server:', response);

    // 检查响应数据格式
    if (typeof response.data === 'object') {
      console.log('Response data parsed successfully:', response.data);
    }

    // 处理未登录状态（code=20004）
    const { data } = response;
    if (data?.code === 20004) {
      const isLoginPage = window.location.pathname.includes("/account/v1/login");
      const isDetailApi = response.request.responseURL.includes("/account/v1/detail");
      
      // 非登录页且非用户详情接口，才提示并跳转
      if (!isLoginPage && !isDetailApi) {
        ElMessage.warning("请先登录后再操作");
        // 携带当前页面作为 redirect 参数，登录后返回原页面
        window.location.href = `${base_url_main}?redirect=${encodeURIComponent(window.location.href)}`;
      }
    }

    return response; // 返回完整响应对象（包含 data、config 等）
  },
  (error) => {
    // 区分超时错误和其他网络错误
    if (error.code === 'ECONNABORTED') {
      ElMessage.error("请求超时，请检查网络后重试");
    } else if (error.response) {
      ElMessage.error(`请求失败，状态码：${error.response.status}`);
    } else {
      ElMessage.error("网络错误，请检查网络连接");
    }
    console.error('Response interceptor error:', error);
    return Promise.reject(error);
  }
);

// 导出实例（统一命名为 request，与接口文件导入名匹配）
export default myAxios;